package com.util;

import cn.hutool.core.date.DateField;
import cn.hutool.core.date.DateTime;
import cn.hutool.jwt.JWT;

public class JwtUtil {
    public static final String KEY = "woniuxy";
    public static final String ISSUER = "woniuxyzs";
    //12小时
    public static final int MILLISECOND = 1000*60*60*12;

    //生成token
    public static String create(Integer eid, String ename) {
        return JWT.create()
                .setKey(KEY.getBytes())         //密钥
                .setIssuer(ISSUER)              //签发者
                .setIssuedAt(DateTime.now())    //签发时间
                .setNotBefore(DateTime.now())   //不可用时间点界限，在这个时间点之前，jwt不可用
                .setExpiresAt(DateTime.now().offset(DateField.MILLISECOND, MILLISECOND))    //设置jwt的过期时间（”exp“）的Payload值，这个过期时间必须要大于签发时间
                .setPayload("eid", eid) //载荷，自定义信息
                .setPayload("ename", ename) //载荷，自定义信息
                .sign();
    }

    //校验token
    public static boolean verify(String token){
        try {
            //true有效，没有被伪造，不验证是否过期
            return JWT.of(token).setKey(KEY.getBytes()).verify();
        } catch (Exception e) {
            return false;
        }
    }

    //校验tokens是否过期
    public static boolean isExpire(String token){
        try {
            //有效，未过期true，过期false
            return !(JWT.of(token).setKey(KEY.getBytes()).validate(0));
        } catch (Exception e) {
            return true;
        }
    }

    //获取载荷信息
    public static Integer getEid(String token){
        //通过token获取自定义载荷信息
        return (Integer) JWT.of(token).getPayload("eid");
    }

    public static String getEname(String token){
        //通过token获取自定义载荷信息
        return (String) JWT.of(token).getPayload("ename");
    }


}
